#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <signal.h>

int count = 0;

void handler(int signo)
{
  printf("count:%d\n", count);
  exit(1);
}

int main()
{
  signal(14, handler);
  alarm(1);
  while(1)
  {
    //统计一秒钟count会加多少次
    ++count;
  }

  return 0;
}

//void handler(int signo)
//{
//  switch(signo)
//  {
//    case 2:
//      printf("hello 2号信号, pid: %d\n", getpid());
//      break;
//    case 3:
//      printf("hello 3号信号, pid: %d\n", getpid());
//      break;
//    case 9:
//      printf("hello 9号信号, pid: %d\n", getpid());
//      break;
//    default:
//      printf("hello %i号信号, pid: %d\n", signo,getpid());
//      break;
//  } 
//  exit(1);
//}
//
//int main()
//{
//  int i = 0;
//  for(; i < 32; ++i)
//  {
//    signal(i, handler);//第二个参数是函数地址，我们可以通过循环捕捉到所有的信号
//  }
//  
//  int ret = alarm(3);//3秒过后发一个信号 
//  while(1)
//  {
//    printf("hello world, ret: %d\n", ret);
//    sleep(1);
//    int res = alarm(0);//取消闹钟
//    printf("res: %d\n", res);
//  }
//  return 0;
//}
//

//void handler(int signo)
//{
//  switch(signo)
//  {
//    case 2:
//      printf("hello 2号信号, pid: %d\n", getpid());
//      break;
//    case 3:
//      printf("hello 3号信号, pid: %d\n", getpid());
//      break;
//    case 9:
//      printf("hello 9号信号, pid: %d\n", getpid());
//      break;
//    default:
//      printf("hello %i号信号, pid: %d\n", signo,getpid());
//      break;
//  } 
//  exit(1);
//}
//
//int main()
//{
//  int i = 0;
//  for(; i < 32; ++i)
//  {
//    //通过signal注册对2号信号的处理动作，改成我们自定义的动作
//    signal(i, handler);//第二个参数是函数地址，我们可以通过循环捕捉到所有的信号
//  }
//  
//  while(1)
//  {
//    //程序先休眠3秒，3秒过后就被杀掉
//    sleep(3);
//    printf("hello world\n");
//    abort();
//  }
//  return 0;
//}

//static void Usage(const char* proc)
//{
//  printf("Usage: \t %s signo who\n", proc);
//}
//
//int main(int argc, char* argv[])
//{
//  //./test signo who
//  //参数没有3个就打印如何使用
//  if(argc != 3)
//  {
//    Usage(argv[0]);
//    return 1;
//  }
//  //将字符串转换为整数
//  int signo = atoi(argv[1]);
//  int who = atoi(argv[2]);
//
//  kill(who, signo);
//
//
//  return 0;
//}

//int main()
//{
//  while(1)
//  {
//    printf("hello world, pid: %d\n", getpid());
//    sleep(1);
//  }
//  return 0;
//}

//int main()
//{
//  if(fork() == 0)
//  {
//    //child
//    int a = 0;
//    a /= 0;
//  }
//
//  //father
//  int status = 0;
//  pid_t id = waitpid(-1, &status,0);
//  //等待失败
//  if(id == -1)
//  {
//    perror("waitpid");
//    return 1;
//  }
//  //等待成功
//  printf("exit code: %d, exit signal: %d, core dump flag: %d\n", (status>>8)&0xFF, (status)&0x7F, (status>>7)&1);
//}
//
//void handler(int signo)
//{
//  switch(signo)
//  {
//    case 2:
//      printf("hello 2号信号, pid: %d\n", getpid());
//      break;
//    case 3:
//      printf("hello 3号信号, pid: %d\n", getpid());
//      break;
//    case 9:
//      printf("hello 9号信号, pid: %d\n", getpid());
//      break;
//    default:
//      printf("hello %i号信号, pid: %d\n", signo,getpid());
//      break;
//  } 
//  exit(1);
//}

//#include <stdio.h>
//
//int main()
//{
//  int a = 0;
//  while(1)
//  {
//    a /= 0;
//  }
//  return 0;
//}


//int main()
//{
//  int i = 0;
//  for(; i < 32; ++i)
//  {
//    //通过signal注册对2号信号的处理动作，改成我们自定义的动作
//    signal(i, handler);//第二个参数是函数地址，我们可以通过循环捕捉到所有的信号
//  }
//
//  while(1)
//  {
//    int *p = NULL;
//    *p = 100;//报错
//  }
//  return 0;
//}

//int main()
//{
//  int i = 0;
//  for(; i < 32; ++i)
//  {
//    //通过signal注册对2号信号的处理动作，改成我们自定义的动作
//    signal(i, handler);//第二个参数是函数地址，我们可以通过循环捕捉到所有的信号
//  }
//
//  while(1)
//  {
//    int *p = NULL;
//    *p = 100;//报错
//  }
//  return 0;
//}

//void handler(int signo)
//{
//  switch(signo)
//  {
//    case 2:
//      printf("hello 2号信号, pid: %d\n", getpid());
//      break;
//    case 3:
//      printf("hello 3号信号, pid: %d\n", getpid());
//      break;
//    case 9:
//      printf("hello 9号信号, pid: %d\n", getpid());
//      break;
//    default:
//      break;
//  } 
//}
//
//int main()
//{
//  int i = 0;
//  for(; i < 32; ++i)
//  {
//    //通过signal注册对2号信号的处理动作，改成我们自定义的动作
//    signal(i, handler);//第二个参数是函数地址，我们可以通过循环捕捉到所有的信号
//    
//  }
//
//  while(1)
//  {
//    printf("I am a process, I am waiting signal, pid: %d!\n", getpid());
//    sleep(1);
//  }
//  return 0;
//}
